//! Header for the IShapeFactory-Interface
/*!
	\file IShapeFactory.h
	\author Thomas Pfeiffer
	\date 13.11.2012 

*/
#ifndef ISHAPEFACTORY_H
#define ISHAPEFACTORY_H

#include <string>
#include "Shape.h"
//! Interface for Factories that create concrete Shapes
/*!
The Interface declares methods to create circles and shapes.
*/
class IShapeFactory {
public:
	virtual ~IShapeFactory() {};
	
	//! Interface Method to create a circle
	/*!
	pure virtual function declaration which should be implemented
	by concrete factories.
	\param origin The center of the circle in a picture.
	\param radius The radius of a circle.
	\param color The color a circle has.
	\return Shape* returns the newly created shape
	*/
	virtual Shape* createCircle(TPosition const& origin, float const& radius, std::string const& color) = 0;

	//! Interface Method to create a Rectangle
	/*!
	A pure virtual function declaration which should be implemented
	by concrete factories
	\param origin The position of the top left corner of the rectangle in a picture.
	\param size The dimensions of a rectangle.
	\param color The color a rectangle has.
	\return Shape* returns the newly created shape
	*/
	virtual Shape* createRectangle(TPosition const& origin, TSize const& size, std::string const& color) = 0;
};

#endif